package cn.edu.xjtu.carlWay.string.reverseStringII;

/**
 * 541. 反转字符串 II
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-string-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution {
    public static void main(String[] args) {
        String ret = reverseStr("abcd", 2);

        System.out.println(ret);
    }

    public static String reverseStr(String s, int k) {
        StringBuilder sb = new StringBuilder();
        boolean reverse = true;
        int len = s.length();
        int i = 0;
        while (i < len) {
            if (!reverse) {
                int end = Math.min(len, i + k);
                for (; i < end; i++) {
                    sb.append(s.charAt(i));
                }
            } else {
                int leftEle = len - i;
                int startIdx = Math.min(leftEle, k) + i - 1;
                int endIdx = i;
                for (int j = startIdx; j >= endIdx; j--) {
                    sb.append(s.charAt(j));
                }
                i = startIdx + 1;
            }
            reverse = !reverse;
        }
        return sb.toString();
    }
}


